git log --no-merges --use-mailmap --format="%aN" --numstat \
| awk '
  BEGIN {
    total_add = 0
    FS = "\t"  # 使用制表符分隔字段，避免数字作者名问题
  }
  
  # 跳过空行
  /^$/ { next }
  
  # 检测作者行（可能包含纯数字）
  !/^[0-9]+\t[0-9]+\t/ && !/^-+\t-+\t/ {
    author = $0
    next
  }
  
  # 处理numstat行（前两个字段是数字）
  /^[0-9]+\t[0-9]+\t/ {
    add[author] += $1
    del[author] += $2
    total_add += $1
    next
  }
  
  # 处理二进制文件变更（跳过）
  /^-+\t-+\t/ { next }
  
  END {
    # 输出表头
    print "作者,新增行数,删除行数,贡献度(%)"
    
    # 计算并存储所有作者贡献
    count = 0
    for (a in add) {
      authors[++count] = a
      ratio[a] = total_add > 0 ? add[a] / total_add * 100 : 0
    }
    
    # 按贡献度降序排序
    for (i = 1; i <= count; i++) {
      max_idx = i
      for (j = i + 1; j <= count; j++) {
        if (ratio[authors[j]] > ratio[authors[max_idx]]) max_idx = j
      }
      # 交换位置
      tmp = authors[i]
      authors[i] = authors[max_idx]
      authors[max_idx] = tmp
      
      # 输出结果
      a = authors[i]
      printf "\"%s\",%d,%d,%.2f%%\n", a, add[a], del[a], ratio[a]
    }
  }
'